#!/usr/bin/env dart

import 'dart:io';
import 'dart:convert';

import 'generators/page_generator.dart';
import 'generators/controller_generator.dart';
import 'generators/model_generator.dart';
import 'generators/service_generator.dart';
import 'generators/widget_generator.dart';
import 'generators/module_generator.dart';

/// Flutter脚手架工具 - 类似Laravel Artisan
/// 用法: dart scripts/make.dart <command> [options]
class MakeTool {
  static const String version = '1.0.0';
  
  static void main(List<String> args) {
    if (args.isEmpty) {
      _showHelp();
      return;
    }

    final command = args[0];
    final arguments = args.skip(1).toList();

    switch (command.toLowerCase()) {
      case 'page':
        _makePage(arguments);
        break;
      case 'controller':
        _makeController(arguments);
        break;
      case 'model':
        _makeModel(arguments);
        break;
      case 'service':
        _makeService(arguments);
        break;
      case 'widget':
        _makeWidget(arguments);
        break;
      case 'module':
        _makeModule(arguments);
        break;
      case 'help':
      case '--help':
      case '-h':
        _showHelp();
        break;
      case 'version':
      case '--version':
      case '-v':
        _showVersion();
        break;
      default:
        print('❌ 未知命令: $command');
        _showHelp();
    }
  }

  static void _makePage(List<String> args) {
    if (args.isEmpty) {
      print('❌ 请提供页面名称');
      print('用法: dart scripts/make.dart page <PageName> [options]');
      print('选项:');
      print('  --module=<module>    指定模块名称');
      print('  --simple            创建简单页面(无GetX)');
      print('  --with-controller   同时创建控制器');
      return;
    }

    final pageName = args[0];
    final options = _parseOptions(args.skip(1).toList());
    
    PageGenerator.generate(pageName, options);
  }

  static void _makeController(List<String> args) {
    if (args.isEmpty) {
      print('❌ 请提供控制器名称');
      print('用法: dart scripts/make.dart controller <ControllerName> [options]');
      print('选项:');
      print('  --module=<module>    指定模块名称');
      print('  --type=<type>        控制器类型 (getx|base)');
      return;
    }

    final controllerName = args[0];
    final options = _parseOptions(args.skip(1).toList());
    
    ControllerGenerator.generate(controllerName, options);
  }

  static void _makeModel(List<String> args) {
    if (args.isEmpty) {
      print('❌ 请提供模型名称');
      print('用法: dart scripts/make.dart model <ModelName> [options]');
      print('选项:');
      print('  --module=<module>    指定模块名称');
      print('  --with-json         添加JSON序列化支持');
      print('  --with-hive         添加Hive存储支持');
      return;
    }

    final modelName = args[0];
    final options = _parseOptions(args.skip(1).toList());
    
    ModelGenerator.generate(modelName, options);
  }

  static void _makeService(List<String> args) {
    if (args.isEmpty) {
      print('❌ 请提供服务名称');
      print('用法: dart scripts/make.dart service <ServiceName> [options]');
      print('选项:');
      print('  --module=<module>    指定模块名称');
      print('  --with-api          添加API调用方法');
      print('  --with-storage      添加本地存储方法');
      return;
    }

    final serviceName = args[0];
    final options = _parseOptions(args.skip(1).toList());
    
    ServiceGenerator.generate(serviceName, options);
  }

  static void _makeWidget(List<String> args) {
    if (args.isEmpty) {
      print('❌ 请提供组件名称');
      print('用法: dart scripts/make.dart widget <WidgetName> [options]');
      print('选项:');
      print('  --module=<module>    指定模块名称');
      print('  --stateful          创建有状态组件');
      print('  --with-controller   创建带控制器的组件');
      return;
    }

    final widgetName = args[0];
    final options = _parseOptions(args.skip(1).toList());
    
    WidgetGenerator.generate(widgetName, options);
  }

  static void _makeModule(List<String> args) {
    if (args.isEmpty) {
      print('❌ 请提供模块名称');
      print('用法: dart scripts/make.dart module <ModuleName> [options]');
      print('选项:');
      print('  --full              创建完整模块 (包含所有层)');
      print('  --simple            创建简单模块');
      print('  --with-api          包含API相关文件');
      return;
    }

    final moduleName = args[0];
    final options = _parseOptions(args.skip(1).toList());
    
    ModuleGenerator.generate(moduleName, options);
  }

  static Map<String, dynamic> _parseOptions(List<String> args) {
    final options = <String, dynamic>{};
    
    for (final arg in args) {
      if (arg.startsWith('--')) {
        if (arg.contains('=')) {
          final parts = arg.substring(2).split('=');
          options[parts[0]] = parts[1];
        } else {
          options[arg.substring(2)] = true;
        }
      }
    }
    
    return options;
  }

  static void _showHelp() {
    print('''
🛠️  Flutter脚手架工具 v$version

用法: dart scripts/make.dart <command> [arguments] [options]

可用命令:
  page <PageName>           创建页面
  controller <Name>         创建控制器
  model <ModelName>         创建数据模型
  service <ServiceName>     创建服务
  widget <WidgetName>       创建组件
  module <ModuleName>       创建完整模块

全局选项:
  --help, -h               显示帮助信息
  --version, -v            显示版本信息

示例:
  dart scripts/make.dart page UserProfile --module=user --with-controller
  dart scripts/make.dart controller UserController --module=user
  dart scripts/make.dart model User --with-json --with-hive
  dart scripts/make.dart service ApiService --with-api
  dart scripts/make.dart widget CustomButton --stateful
  dart scripts/make.dart module Auth --full --with-api

更多信息请参考: scripts/README.md
''');
  }

  static void _showVersion() {
    print('Flutter脚手架工具 v$version');
  }
}

void main(List<String> args) {
  MakeTool.main(args);
}